home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Almathera Ten Pack 3: CDPD 3
/
Almathera Ten on Ten - Disc 3: CDPD3.iso
/
scope
/
101-125
/
scopedisk122
/
bassub
/
lists.sub
< prev
next >
Wrap
Text File
|
1995-03-19
|
2KB
|
121 lines
' LISTS - Single Linked List Module
'
REM GetOrderedPtr
SUB GetOrderedPtr(head%,ListSize%,ListPtr%(1),RankPtr%(1))
STATIC i%
RankPtr%(1)=head%
FOR i%=2 TO ListSize%
RankPtr%(i%)=ListPtr%(i%-1)
NEXT i%
END SUB
REM RevOrderedPtr
SUB RevOrderedPtr(head%,ListSize%,ListPtr%(1),RankPtr%(1))
STATIC i%
RankPtr%(ListSize%)=head%
FOR i%=ListSize%-1 TO 1 STEP -1
RankPtr%(i%)=ListPtr%(RankPtr%(i%+1))
NEXT i%
END SUB
REM FindNode
SUB FindNode(Item$,head%,ListItem$(1),ListPtr%(1),Found%)
' Search for Item$ in list ListItems$() starting with head%
' head% may not neccessarily be the actual head of the list.
' This feature is useful in "smart" searches
STATIC Ptr%,Go.On%
Found%=0
Ptr%=head%
Go.On%=1
WHILE (Ptr%<>0) AND (Go.On%=1)
IF ListItem$(Ptr%)>=Item$ THEN
Go.On%=0
ELSE
Ptr%=ListPtr%(Ptr%)
END IF
WEND
IF Ptr%<>0 THEN
IF ListItem$(Ptr%)=Item$ THEN Found%=1
END IF
END SUB
REM InsertNode
SUB InsertNode(Item$,head%,ListSize%,ListItem$(1),ListPtr%(1))
' insert Item$ in list ListItem$()
STATIC Ptr%,LastPtr%,Go.On%
IF (head%=0) OR (ListSize%=0) THEN
ListSize%=1
head%=1
ListItem$(1)=Item$
ListPtr%(1)=0
ELSE
LastPtr%=0
Ptr%=head%
Go.On%=1
WHILE (Ptr%<>0) AND (Go.On%=1)
IF ListItem$(Ptr%)>=Item$ THEN
Go.On%=0
ELSE
LastPtr%=Ptr%
Ptr%=ListPtr%(Ptr%)
END IF
WEND
INCR ListSize%
ListItem$(ListSize%)=Item$
IF LastPtr%=0 THEN
ListPtr%(ListSize%)=Ptr%
head%=ListSize%
ELSE
ListPtr%(LastPtr%)=ListSize%
ListPtr%(ListSize%)=Ptr%
END IF
END IF
END SUB
REM DelNode
SUB DelNode(Item$,OK%,head%,ListSize%,ListItem$(1),ListPtr%(1))
' routine to delete node containing Item$
STATIC Ptr%,LastPtr%,Go.On%
OK%=0
LastPtr%=0
Ptr%=head%
Go.On%=1
WHILE (Ptr%<>0) AND (Go.On%=1)
IF ListItem$(Ptr%)>=Item$ THEN
Go.On%=0
ELSE
LastPtr%=Ptr%
Ptr%=ListPtr%(Ptr%)
END IF
WEND
IF Ptr%<>0 THEN
IF ListItem$(Ptr%)=Item$ THEN OK%=1
END IF
IF OK%=1 THEN
IF LastPtr%=0 THEN
head%=ListPtr%(Ptr%)
ELSE
ListPtr%(LastPtr%)=ListPtr%(Ptr%)
END IF
END IF
DECR ListSize%
END SUB